import java.util.Scanner;

public class test_0129 {
    public static void main(String[] args) {
        int n;
        count = 0;
        System.out.println("请输入层数：");
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        tower(n,'A','B','C');
        sc.close();
    }
    static int count = 0;
    public static void print(char start, char end){
        count++;
        System.out.println("第"+ count +"次移动：" + start + " -> " + end);
    }
    public static void tower(int n,char s,char m,char e){
        if(n < 1){
            System.out.println("请输入正整数");
            return;
        }
        if(n == 1){
            print(s,e);
        }else {
            tower(n - 1, s, e, m);
            print(s,e);
            tower(n - 1, m, s, e);
        }
    }
}





//    public static void main(String[] args) {
//        int n;
//        Scanner sc = new Scanner(System.in);
//        n = sc.nextInt();
//        long jc = dgjc(n);
//        System.out.println(jc);
//        sc.close();
//    }
//
//    public static long dgjc(int n){
//        if(n < 0){
//            System.out.println("请输入正数");
//            return -1;
//        }
//        if(n == 1) {
//            return 1;
//        }else {
//            return (n * dgjc(n - 1));
//        }
//    }



//    public static void main(String[] args) {
//        int a = 10, b = 30;
//        double c = 1.0, d = 3.0, e = 2.0;
//        System.out.println(max(a,b));
//        System.out.println(max(c, d, e));
//    }
//
//    public static int max(int x1, int x2){
//        return x1 > x2 ? x1 : x2;
//    }
//    public static double max(double x1, double x2, double x3){
//        x1 = x1 > x2 ? x1 : x2;
//        return x1 > x3 ? x1 : x3;
//    }



//    public static void main(String[] args) {
//        int a = 10, b = 10;
//        double c = 1.0, d = 1.0, e = 1.0;
//        System.out.println(add(a,b));
//        System.out.println(add(c,d,e));
//    }
//
//    public static int add(int x1, int x2){
//        return x1 + x2;
//    }
//
//    public static double add(double x1, double x2, double x3){
//        return x1 + x2 + x3;
//    }



//    public static void main(String[] args) {
//        int n;
//        Scanner sc = new Scanner(System.in);
//        n = sc.nextInt();
//        if(fb(n) != -1){
//            System.out.println(fb(n));
//        }
//        sc.close();
//    }
//
//    public static long fb(int n){
//        if(n < 1){
//            System.out.println("输入值错误");
//            return -1;
//        }
//        if(n == 1){
//            return 0;
//        }
//        if (n == 2 || n == 3) {
//            return 1;
//        }
//
//        long x1 = 1, x2 = 1;
//        for (int i = 4; i <= n ; i++) {
//            long tmp = x1 + x2;
//            x1 = x2;
//            x2 = tmp;
//        }
//        return x2;
//    }



//    public static void main(String[] args) {
//        int n;
//        Scanner sc = new Scanner(System.in);
//        n = sc.nextInt();
//        System.out.printf("%d\n",jch(n));
//        sc.close();
//    }
//
//    public static int jch(int n){
//        int sum = 0;
//        int tmp = 1;
//        for (int i = 1; i <= n ; i++) {
//            tmp  *= i;
//            sum += tmp;
//        }
//        return sum;
//    }



//    public static void main(String[] args) {
//        int n;
//        Scanner sc = new Scanner(System.in);
//        n = sc.nextInt();
//        System.out.println(jc(n));
//        sc.close();
//    }
//
//    public static int jc(int n){
//        int tmp = 1;
//        while(n > 0){
//            tmp *= n;
//            n--;
//        }
//        return tmp;
//    }



//    public static void main(String[] args) {
//        double a,b,c;
//        Scanner sc = new Scanner(System.in);
//        a = sc.nextDouble();
//        b = sc.nextDouble();
//        c = sc.nextDouble();
//        System.out.println(max2(a,b));
//        System.out.println(max2(a,c));
//        System.out.println(max2(b,c));
//        System.out.println(max3(a,b,c));
//        sc.close();
//    }
//
//    public static double max2(double x1, double x2){
//            return x1 > x2 ? x1 : x2;
//    }
//
//    public static double max3(double x1, double x2, double x3){
//        double tmp = max2(x1, x2);
//        tmp = max2(tmp,x3);
//        return tmp;
//    }